/**
 * @desc quản lý sự kiện blur của window
 * @note đặc biệt cho IE
 * @author vinhnv@live.com
 * @link http://pro-thoughts.blogspot.com/2006/10/incorrect-behavior-of-windowonblur.html
 * @since 2012/04/08
 */
var WindowBlurController = {
    /**
     * @desc element đang được focus
     */
    activeElement : null,
    /**
     * @desc cờ xác định trình duyệt là IE
     */
    IsIE : null,
    /**
     * @desc blur & đóng cửa sổ
     * @guide <body onload="WindowBlurController.bindWindowBlur();">
     * @author vinhnv@vnext.vn
     * @since 2012/04/07
     */
    bindWindowBlur : function() {
        // Nếu là ie, đối tượng onblur là document
        if (navigator.appName == "Microsoft Internet Explorer") {
            
            // Trình duyệt hiện tại là IE
            WindowBlurController.IsIE = true;
            
            // Lấy đối tượng active hiện tại của tài liệu
            // Chỉ có IE, document mới có thuộc tính activeElement
            WindowBlurController.activeElement = document.activeElement;
            
            // Bind sự kiện cho document
            // Vì window.onblur chỉ tác dụng cho window, không tác dụng cho Dom element
            // Còn document.onfocusout tác dụng tất cả Dom element
            // Đối với window border, titlebar có khả năng là không sinh ra sự kiện blur hoặc focusout
            document.onfocusout = WindowBlurController.closeWindow;
            
        }
        // Ngược lại, là trình duyệt khác
        else {
            
            // Bind sự kiện cho window
            window.onblur = WindowBlurController.closeWindow;
            
        }
    },
    /**
     * @desc đóng window nếu có thể
     * @param eventObject có thể nhận event là tham số nếu là xử lý sự kiện
     * @author vinhnv@vnext.vn
     * @since 2012/04/07
     */
    closeWindow : function(eventObject) {
        // Nếu cửa sổ được mở bởi cửa sổ khác
        if (window.opener != null) {
            
            // Khi chuyển sang Dom element khác
            // activeElement thay đổi tức là người dùng không chuyển sang window khác
            // Ngược lại, nếu activeElement không thay đổi tức là đã chuyển sang window khác
            if (WindowBlurController.IsIE && WindowBlurController.activeElement != document.activeElement) {
                
                // Cập nhật activeElement
                WindowBlurController.activeElement = document.activeElement;
                
            }
            else {
                
                // Đóng cửa sổ hiện tại
                window.close();
            }
        }
    }
}